package com.kotodama.domain.services;

import com.kotodama.domain.entities.Tenant;
import com.kotodama.domain.enums.TenantStatus;
import com.kotodama.domain.repositories.TenantRepository;
import org.springframework.stereotype.Service;

/**
 * 租户领域服务
 * 包含租户相关的业务逻辑和规则
 */
@Service
public class TenantDomainService {

    private final TenantRepository tenantRepository;

    public TenantDomainService(TenantRepository tenantRepository) {
        this.tenantRepository = tenantRepository;
    }

    /**
     * 验证租户名称是否唯一
     * 
     * @param name 租户名称
     * @return 是否唯一
     */
    public boolean isTenantNameUnique(String name) {
        return !tenantRepository.existsByName(name);
    }

    /**
     * 验证租户是否可以被激活
     * 
     * @param tenant 租户
     * @return 是否可以激活
     */
    public boolean canActivateTenant(Tenant tenant) {
        return tenant.getStatus() == TenantStatus.INACTIVE ||
                tenant.getStatus() == TenantStatus.SUSPENDED;
    }

    /**
     * 验证租户是否可以被停用
     * 
     * @param tenant 租户
     * @return 是否可以停用
     */
    public boolean canDeactivateTenant(Tenant tenant) {
        return tenant.getStatus() == TenantStatus.ACTIVE;
    }

    /**
     * 验证租户是否可以被删除
     * 
     * @param tenant 租户
     * @return 是否可以删除
     */
    public boolean canDeleteTenant(Tenant tenant) {
        return tenant.getStatus() == TenantStatus.INACTIVE;
    }

    /**
     * 创建新租户的业务规则验证
     * 
     * @param name 租户名称
     * @throws IllegalArgumentException 如果验证失败
     */
    public void validateTenantCreation(String name) {
        if (name == null || name.trim().isEmpty()) {
            throw new IllegalArgumentException("租户名称不能为空");
        }

        if (name.length() < 2 || name.length() > 50) {
            throw new IllegalArgumentException("租户名称长度必须在2-50个字符之间");
        }

        if (!isTenantNameUnique(name)) {
            throw new IllegalArgumentException("租户名称已存在: " + name);
        }
    }
}